package hash;

import java.util.HashMap;

/**
 * HashMap的初始化默认长度为 DEFAULT_INITIAL_CAPACITY = 1 << 4 即 16
 */
public class b1_扰动函数 {

	public static void main(String[] args) {
		new HashMap<>();
	}

	/**
	 * HashMap的扰动函数
	 * HashMap并没有直接取哈希值，而是进行了一次扰动，将哈希值右移16位 与 原哈希值做 *异或运算*。
	 * 右移16位是原长度的一半。这样就混合了原哈希值的高位与低位，增大了 *随机性*
	 *
	 * @param key
	 * @return
	 */
	static final int hash(Object key) {
		int h;
		return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
	}

}
